/*
* 编写程序，通过 for 循环和 if 判断语句实现，在终端通过 node 运行之，使之输出如下：
  注：var str = “A”;  这是第一行代码。（可集成到 PrintChar 类当中）
  AAAAAAAAAA
  AAAAAAAA
  AAAAAA
  AAAA
  AA

  编写程序，通过 for 循环和 if 判断语句实现，在终端通过 node 运行之，使之输出如下：
  注：（可集成到 PrintChar 类当中）
       A
      A A
     A   A
    A     A
   A       A
  A         A
 A           A
AAAAAAAAAAAAAAA
*/

const log = console.log;
//类的语法糖
class PrintChar {
  constructor(char, count) {
    this.char = char;
    this.count = count;
  }
  for1() {
    let pChar = this.char;
    for (let i = 0; i < this.count; i++) {
      log(pChar);
      pChar += this.char;
    }
  }
  for2 () {
    let pChar = this.char;
    for (let i = this.count; i > 0; i--) {
      pChar = this.char;
      for (let j = 0; j < i - 1; j++) {
        pChar += this.char;
      }
      log(pChar);
    }
  }
  for3 () {
    let pChar = this.char;
    for (let i = this.count; i > 0; i--) {
      pChar = this.char;
      if ((i + 1) % 2) { // 打印基数行 从11开始
        for (let j = 0; j < i - 1; j++) {
          pChar += this.char;
        }
        log(pChar);
      }
    }
  }
  for4 (row) {
    let column = row * 2 - 1; // 根据提供的行 计算应为多少列
    let pSpace = "";
    let pChar;
    for (let i = 1; i <= row; i++) {
      pSpace = ""; // 重置每次循环两次空格
      pChar = this.char; // 重置字符
      // 计算每行两次空格
      for (let j = row - i; j > 0; j--) {
        pSpace += " ";
      }
      // 当大于第一行且小于第二行时 计算字符中间的空格
      if (i > 1 && i < row) {
        let centerSpace = "";
        for (let z = 0; z < i * 2 - 3; z++) {
          centerSpace += " ";
        }
        pChar = this.char + centerSpace + this.char;
      } else if (i === row) { // 最后一行无空格
        for (let g = 1; g < column; g++) {
          pChar += this.char;
        }
      }
      log(pSpace + pChar + pSpace);
    }
  }
}
//实例
var p = new PrintChar("A", 10);
p.for1();
log("--------------");
p.for2();
log("--------------");
p.for3();
log("--------------");
p.for4(8);
